package com.xl.exercise;

import java.util.Random;
import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        //完成双色球系统的开发
        int[] userSelectNumber = userSelectNumber();
        System.out.print("您投注的号码是：");
        printNumbers(userSelectNumber);
        int[] createLuckyNumber = createLuckyNumber();
        System.out.print("彩票中奖号码是：");
        printNumbers(createLuckyNumber);
        judge(userSelectNumber, createLuckyNumber);
    }

    /**
     * 输出用户投注号码
     * @param numbers 投注号码
     */
    public static void printNumbers(int[] numbers) {
        for (int number : numbers) {
            System.out.print(number + " ");
        }
        System.out.println();
    }

    /**
     * 设计一个方法，用于让用户投注一组号码并返回（前6个是红球号码。后1个是蓝球）
     * @return 用户选择号码
     */
    public static int[] userSelectNumber() {
        //创建一个整数数组，用于存储用户投注的7个号码，前6个是红球，后一个是蓝球
        int[] numbers = new int[7];
        //遍历前6个位置，让用户输入6个红球号码，存入
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < numbers.length - 1; i++) {
            /*System.out.println("请输入第" + (i + 1) + "个红球号码（1-33之间，不能重复）：");
            int number = scanner.nextInt();
            if (number < 1 || number > 33) {
                System.out.println("红球号码必须在1-33之间！");
                i--;
            } else {
                //号码在1-33之间，接着判断这个号码是否重复，不重复才可以使用
                if (exist(numbers, number)) {
                    System.out.println("号码重复，请重新输入！");
                    i--;
                } else {
                    numbers[i] = number;
                }
            }*/
            while (true) {
                System.out.println("请输入第" + (i + 1) + "个红球号码（1-33之间，不能重复）：");
                int number = scanner.nextInt();
                if (number < 1 || number > 33) {
                    System.out.println("红球号码必须在1-33之间！");
                } else {
                    //号码在1-33之间，接着判断这个号码是否重复，不重复才可以使用
                    if (exist(numbers, number)) {
                        System.out.println("号码重复，请重新输入！");
                    } else {
                        numbers[i] = number;
                        break;
                    }
                }
            }
        }
        //投注最后一个篮球号码
        while (true) {
            System.out.println("请输入蓝球号码：");
            int blueNumber = scanner.nextInt();
            if (blueNumber < 1 || blueNumber > 16) {
                System.out.println("蓝球号码必须在1-16之间！");
            } else {
                numbers[numbers.length - 1] = blueNumber;
                break;
            }
        }
        return numbers;
    }

    /**
     * 检查该号码是否在数组中存在
     * @param numbers 号码数组
     * @param number 选择的号码
     * @return true表示存在，反之不是
     */
    public static boolean exist(int[] numbers, int number) {
        if (numbers == null) {
            return false;
        }
        for (int num : numbers) {
            if (num == 0) {
                break;
            }
            if (num == number) {
                return true;
            }
        }
        return false;
    }


    /**
     * 生成一个随机的获奖号码
     * @return 获奖号码
     */
    public static int[] createLuckyNumber() {
        //创建一个整数数组，用于获奖号码的7个号码，前6个是红球，后一个是蓝球
        int[] numbers = new int[7];
        //遍历前6个位置，随机生成6个红球号码，存入
        Random random = new Random();
        for (int i = 0; i < numbers.length - 1; i++) {
            //生成一个1-33的随机号码
            int number = random.nextInt(33) + 1;
            /*//检查号码是否已经存在
            if (exist(numbers, num)) {
                i--;
                continue;
            }
            numbers[i] =  number;*/
            while (true) {
                if (!exist(numbers, number)) {
                    numbers[i] = number;
                    break;
                }
            }
        }
        //生成最后一个篮球号码
        numbers[numbers.length - 1] = random.nextInt(16) + 1;
        return numbers;
    }

    /**
     * 判断用户的中奖情况
     */
    public static void judge(int[] userSelectNumber, int[] createLuckyNumber) {
        //userSelectNumber = [12 23 4 5 6 3 7]
        //createLuckyNumber = [24 10 27 21 25 12 15]
        //分别定义两个变量用于记住红球命中了几个以及蓝球命中了几个
        int redCount = 0;
        int blueCount = 0;
        //遍历用户选择的红球号码和生成的红球号码判断命中的球数
        for (int i = 0; i < userSelectNumber.length-1; i++) {
            for (int j = 0; j < createLuckyNumber.length-1; j++) {
                if (userSelectNumber[i] == createLuckyNumber[j]) {
                    redCount++;
                }
            }
        }
        //判断蓝球是否命中
        blueCount = userSelectNumber[userSelectNumber.length-1] == createLuckyNumber[createLuckyNumber.length-1] ? 1 : 0;
        System.out.println("您命中的红球数量是："+redCount);
        System.out.println("您命中的蓝球数量是："+blueCount);
        //判断中奖详情并输出结果
        if (redCount == 6 && blueCount == 1) {
            System.out.println("恭喜您，中奖1000万，财富自由了！");
        } else if (redCount == 6 && blueCount == 0) {
            System.out.println("恭喜您，中奖500万，可以买房买车了！");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("恭喜您，中奖3000元，可以出去旅游一次了！");
        } else if ((redCount == 5 && blueCount == 0) || (redCount == 4 && blueCount == 1)) {
            System.out.println("恭喜您，中奖200元！");
        }  else if ((redCount == 4 && blueCount == 0) || (redCount == 3 && blueCount == 1)) {
            System.out.println("恭喜您，中了10元！");
        } else if (redCount < 3 && blueCount == 1){
            System.out.println("恭喜您，中了5元！");
        } else {
            System.out.println("感谢您对福利事业做出的巨大贡献！");
        }
    }
}
